using System;
using System.Collections.Generic;
using System.IO;
using MathSharp;

namespace MathSharp.Script
{
	public abstract class BaseCommand
	{
		protected Namespace ns;
		protected Script script {
			get {
				return ns.Script;
			}
		}
		protected int baseScriptLine;
		
		public BaseCommand (Namespace ns)
		{
			this.ns = ns;
		}
		
		/// <summary>
		/// Загружает блок и разбирает его на команды
		/// </summary>
		/// <param name="scriptText">
		/// A <see cref="IList<System.String>"/>
		/// </param>
		public virtual void Parse(IList<string> scriptText) {
			baseScriptLine = scriptText.GetOriginalLineSmarts(0);
		}
		
		/// <summary>
		/// Имя блока
		/// </summary>
		public abstract string Name {
			get;
		}
		
		/// <summary>
		/// подготавливает скрипт к выполнению. Обрабатывает декларирующие конструкции
		/// </summary>
		public virtual void PrepareExecute() {
		}
		
		/// <summary>
		/// Запускает скрипт на выполнение
		/// </summary>
		/// <returns>
		/// Возвращаемый командой результат. null если нет результата
		/// </returns>
		public virtual Value Execute() {
			return null; // null - нет возвращённого результата
		}
	}
}

